package jdk.lambda.stream;

import jdk.entity.UserEntity;
import jdk.entity.UserEntityList;

import java.util.Comparator;
import java.util.List;
import java.util.Optional;

/**
 * Copyright (C), 2022, szw
 * FileName: StreamFindTest
 *
 * @author songyafei
 * Date:     2022/1/17 15:33
 * Description: 查询某一项案例
 * History:
 * <author>          <time>          <version>          <desc>
 * 作者姓名           修改时间           版本号              描述
 */
public class StreamFindTest {

    public static void main(String[] args) {
        List<UserEntity> item = UserEntityList.getItem();
        /**
         * findFirst :查找年龄大于18，创建日期最新的第一条
         */
        Optional<UserEntity> first = item.stream().filter(m -> m.getAge() > 18).sorted(Comparator.comparing(UserEntity::getCreatedDate).reversed()).findFirst();
        System.out.println(first.get().toString());

        /**
         * findAny: 查找年龄大于18，创建日期 的一条
         */
        Optional<UserEntity> findAny = item.stream().filter(m -> m.getAge() > 18).sorted(Comparator.comparing(UserEntity::getCreatedDate).reversed()).findAny();
        System.out.println(findAny.get().toString());

        /**
         * 实际上对于顺序流式处理而言，findFirst和findAny返回的结果是一样的，
         * 至于为什么会这样设计，是因为在下一篇我们介绍的并行流式处理，
         * 当我们启用并行流式处理的时候，查找第一个元素往往会有很多限制，
         * 如果不是特别需求，在并行流式处理中使用findAny的性能要比findFirst好。
         */
    }
}
